<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
            console.log(1)

            document.addEventListener('click', function () {
                console.log(4)
            })

            console.log(2)

            setTimeout(function () {
                console.log(3)
            }, 3000)

    // 思考

    // 异步任务一般由回调函数组成。
    // 1. dom事件  click、load ， resize
    // 2. ajax/fetch 网络请求
    // 3. setTimeout / setInterval

    /* ==================== 事件循环低配版理解 ===================== */
    // 1. 首先判断JS任务是同步的还是异步的，同步任务会在主线程上依次顺序执行，会形成一个执行栈
    // 2. 异步任务会提交给异步进程处理（click/fetch），当满足触发条件后，异步进程会将异步任务
    //    推到消息队列（任务队列）中
    // 3. 当主线程上的所有的，所有的，所有的同步任务执行完之后，就会去消息队列（任务队列中）看有没有
    //    可以执行的任务，如果有，拿到主线程上执行，执行完之后再去消息中查看，如果没有，等，依次不断的循环

    // EventLoop
    </script>
</body>
</html>